package JDBCPractice;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        //JDBC需要通过一下几步来完成开发
        //1.创建并初始化一个数据源  数据源：数据从哪里来（描述数据库服务器在哪里）
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java107_2?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("12345");//这几个东西都设置了，才能连接数据库
        //以上几行代码只是描述数据源，描述数据库在哪  但是还没有和数据库建立连接

        //2.和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //3.从控制台录入用户要插入的数据
        System.out.println("请输入学生姓名：");
        String name = scanner.nextLine();
        System.out.println("请输入学生id：");
        int id = scanner.nextInt();
        //4.构造SQL语句
        //这里只是一个字符串语句，就像是一个参数
        //String sql = "insert into student values(" + id + ",'"+ name + "')";//但是这种写法非常丑
        String sql = "insert into student values(?,?)";//问号就是两个占位符
        PreparedStatement statement = connection.prepareStatement(sql);//就是预编译一下给数据库服务器的这个sql指令
        //上一行代码的意思就是做一些准备工作，如果直接把sql语句传给数据库服务器，让它去解析我们的指令，这个时候服务器的压力就会大很多
        statement.setInt(1,id);//这个是把第一个占位符设置成id
        statement.setString(2,name);//这个是把第二个占位符设置成name
        //5.执行SQL语句
        int ret = statement.executeUpdate();//executeUpdate指的是影响的行数（可以在服务器那端敲语句查看一下）
        System.out.println("ret = " + ret);
        //这句代码的意思就是把sql语句（预编译过的）发送给数据库服务器，由数据库服务器做出响应

        //6.释放必要的资源
        statement.close();
        connection.close();
    }
}